'''
# 读取“银行贷款审批数据.xlsx”表，自变量为x1~x15，决策变量为y（1-同意贷款，0-不同意贷款）
# 其中x1~x6为数值变量，x7~x15为名义变量
# 数据清洗：
# 1.针对读取的整个数据集（原始表），去掉缺失值,返回结果用A1表示，
#   其中A1要求为数据框，字段名称与原数据集一致
# 2.针对读取的整个数据集（原始表），空值用0来代替，返回结果用A2表示，数据结构同1的要求。
# 3.针对读取的整个数据集（原始表），请对x1~x6中存在的缺失值用均值策略填充，x7~x15用最频繁值（众数）策略填充
#   返回填充处理后的整个数据集，记为A3，数据结构同1的要求
# 4.针对3处理后的整个数据集，对x1~x6,通过Z-Score方法判断异常值，并删除异常值所在的行
#   返回异常值处理后的整个数据集，记为A4，数据结构同1的要求
# 5. 针对4处理后的整个数据集，统计重复数据记录数，返回统计结果用数值Num表示
# 6. 针对4处理后的整个数据集，删除重复的记录，返回结果用A5表示，数据结构同1的要求
'''
import pandas as pd
from sklearn.preprocessing import Imputer
A=pd.read_excel('银行贷款审批数据.xlsx')
#1.去掉缺失值
A1=A.dropna()

#2.空值使用0来填充
A2=A.fillna(0)

#3.x1_x6使用缺失值策略，x7-x15使用最频繁填充
a=A.iloc[:,:6]
a1=A.iloc[:,6:-1]
nan_model=Imputer(missing_values='NaN',strategy='mean',axis=0)
nan_model1=Imputer(missing_values='NaN',strategy='most_frequent',axis=0)
#对前六行进行填充
nan_result=pd.DataFrame(nan_model.fit_transform(A.iloc[:,:6]))
nan_result.columns=a.columns
nan_result1=pd.DataFrame(nan_model1.fit_transform(A.iloc[:,6:-1]))
nan_result1.columns=a1.columns
#合并数据框
A3=pd.concat([nan_result,nan_result1,A.iloc[:,[15]]],axis=1)



##4.判断异常值
df_zscore=A3.iloc[:,:6]
cols=df_zscore.columns
for col in cols:
    df_col=A3[col]
    z_score=(df_col-df_col.mean())/df_col.std()
    df_zscore[col]=z_score.abs()>2.2
#
##删除异常值所在的行
for i in A3.iloc[:,:6].columns:
    A4=A3.iloc[:,:6][df_zscore[i]==False]
    #重置索引
    A4.index=range(len(A4))
##
###5.统计重复记录数
Nmu1=A4.duplicated() 
Num=Nmu1.value_counts()[1:]
##
###6.针对4处理后的整个数据集，删除重复的记录，返回结果用A5表示，数据结构同1的要求
A5= A4.drop_duplicates()
#重置索引
A5.index=range(len(A5))












